--- /dev/null
+/* Extracted from GDB sources. */
+
+typedef long long bfd_signed_vma;
+typedef bfd_signed_vma file_ptr;
+
+typedef enum bfd_boolean {false, true} boolean;
+
+typedef unsigned long long bfd_size_type;
+
+typedef unsigned int flagword;
+
+typedef unsigned long long CORE_ADDR;
+typedef unsigned long long bfd_vma;
+
+struct bfd_struct {
+ int x;
+};
+
+struct asection_struct {
+ unsigned int user_set_vma : 1;
+ bfd_vma vma;
+ bfd_vma lma;
+ unsigned int alignment_power;
+ unsigned int entsize;
+};
+
+typedef struct bfd_struct bfd;
+typedef struct asection_struct asection;
+
+static bfd *
+bfd_openw_with_cleanup (char *filename, const char *target, char *mode);
+
+static asection *
+bfd_make_section_anyway (bfd *abfd, const char *name);
+
+static boolean
+bfd_set_section_size (bfd *abfd, asection *sec, bfd_size_type val);
+
+static boolean
+bfd_set_section_flags (bfd *abfd, asection *sec, flagword flags);
+
+static boolean
+bfd_set_section_contents (bfd *abfd, asection *section, void * data, file_ptr offset, bfd_size_type count);
+
+static void
+dump_bfd_file (char *filename, char *mode,
+ char *target, CORE_ADDR vaddr,
+ char *buf, int len)
+{
+ bfd *obfd;
+ asection *osection;
+
+ obfd = bfd_openw_with_cleanup (filename, target, mode);
+ osection = bfd_make_section_anyway (obfd, ".newsec");
+ bfd_set_section_size (obfd, osection, len);
+ (((osection)->vma = (osection)->lma= (vaddr)), ((osection)->user_set_vma = (boolean)true), true);
+ (((osection)->alignment_power = (0)),true);
+ bfd_set_section_flags (obfd, osection, 0x203);
+ osection->entsize = 0;
+ bfd_set_section_contents (obfd, osection, buf, 0, len);
+}
+
+static bfd *
+bfd_openw_with_cleanup (char *filename, const char *target, char *mode)
+{
+ static bfd foo_bfd = { 0 };
+ return &foo_bfd;
+}
+
+static asection *
+bfd_make_section_anyway (bfd *abfd, const char *name)
+{
+ static asection foo_section = { false, 0x0, 0x0, 0 };
+
+ return &foo_section;
+}
+
+static boolean
+bfd_set_section_size (bfd *abfd, asection *sec, bfd_size_type val)
+{
+ return true;
+}
+
+static boolean
+bfd_set_section_flags (bfd *abfd, asection *sec, flagword flags)
+{
+}
+
+static boolean
+bfd_set_section_contents (bfd *abfd, asection *section, void * data, file_ptr offset, bfd_size_type count)
+{
+ if (count != (bfd_size_type)0x1eadbeef)
+ abort();
+}
+
+static char hello[] = "hello";
+
+int main(void)
+{
+ dump_bfd_file(0, 0, 0, (CORE_ADDR)0xdeadbeef, hello, (int)0x1eadbeef);
+ exit(0);
+}