mirror of
https://github.com/nArnoSNES/tcc-65816.git
synced 2024-06-11 22:29:28 +00:00
103 lines
2.3 KiB
C
103 lines
2.3 KiB
C
/* 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)0x1eef)
|
|
abort();
|
|
}
|
|
|
|
static char hello[] = "hello";
|
|
|
|
int main(void)
|
|
{
|
|
dump_bfd_file(0, 0, 0, (CORE_ADDR)0xdeadbeef, hello, (int)0x1eef);
|
|
exit(0);
|
|
}
|