#define ARCH "microblaze"
#elif defined(TARGET_e1)
#define ARCH "e1-coff"
+#elif defined(TARGET_bfin)
+#define ARCH "bfin"
#else
#error "Don't know how to support your CPU architecture??"
#endif
-#if defined(TARGET_m68k) || defined(TARGET_h8300)
+#if defined(TARGET_m68k) || defined(TARGET_h8300) || defined(TARGET_bfin)
/*
* Define a maximum number of bytes allowed in the offset table.
* We'll fail if the table is larger than this.
for (i=0; i<number_of_symbols; i++) {
if (symbol_table[i]->section == sec) {
if (!strcmp(symbol_table[i]->name, name)) {
- return symbol_table[i]->value;
+ return symbol_table[i]->value;
}
}
}
-unsigned long *
+uint32_t *
output_relocs (
bfd *abs_bfd,
asymbol **symbols,
unsigned char *data, int data_len, unsigned long data_vma,
bfd *rel_bfd)
{
- unsigned long *flat_relocs;
+ uint32_t *flat_relocs;
asection *a, *sym_section, *r;
arelent **relpp, **p, *q;
const char *sym_name, *section_name;
/* create a new reloc entry */
flat_relocs = realloc(flat_relocs,
- (flat_reloc_count + 1) * sizeof(unsigned long));
+ (flat_reloc_count + 1) * sizeof(uint32_t));
flat_relocs[flat_reloc_count] = pflags | (section_vma + q->address);
flat_reloc_count++;
relocation_needed = 0;
*/
if (relocation_needed) {
flat_relocs = realloc(flat_relocs,
- (flat_reloc_count + 1) * sizeof(unsigned long));
+ (flat_reloc_count + 1) * sizeof(uint32_t));
#ifndef TARGET_e1
flat_relocs[flat_reloc_count] = pflags |
(section_vma + q->address);
-#if 0
-/* shared lib symbols stuff */
-
-long
-get_symbol(char *name, asection *sec, asymbol **symbol_table, long number_of_symbols)
-{
- long i;
- for (i=0; i<number_of_symbols; i++) {
- if (symbol_table[i]->section == sec) {
- if (!strcmp(symbol_table[i]->name, name)) {
- return symbol_table[i]->value;
- }
- }
- }
- return -1;
-}
-
-int
-output_offset_table(int fd, char *ename, bfd *abfd, asymbol **symbol_table, long number_of_symbols)
-{
- long i;
- FILE *ef;
- char buf[80];
- char libname[80];
- long etext_addr;
- long sym_addr;
-
- int foobar = 0;
- int count = 0;
- signed short *tab = malloc(32768); /* we don't know how many yet*/
-
- asection *text_section = bfd_get_section_by_name (abfd, ".text");
-
- if (!(ef = fopen(ename, "rb"))) {
- fprintf (stderr,"Can't open %s\n",ename);
- exit(1);
- }
-
- fgets(libname, 80, ef);
-
- if (number_of_symbols < 0) {
- fprintf (stderr,"Corrupt symbol table!\n");
- exit(1);
- }
-
- if ((etext_addr = get_symbol("etext",
- text_section,
- symbol_table,
- number_of_symbols)) == -1) {
- fprintf (stderr,"Can't find the symbol etext\n");
- exit(1);
- }
-
- fgets(buf, 80, ef);
- while (!feof(ef)) {
- buf[strlen(buf)-1] = 0; /* Arrrgh! linefeeds */
-
- if ((sym_addr = get_symbol(buf,
- text_section,
- symbol_table,
- number_of_symbols)) == -1) {
- fprintf (stderr,"Can't find the symbol %s\n",buf);
- foobar++;
- } else {
- tab[++count] = htons(sym_addr - etext_addr);
- }
- fgets(buf, 80, ef);
- }
-
- fclose(ef);
-
- if (foobar) {
- fprintf (stderr,"*** %d symbols not found\n",foobar);
- exit(10);
- }
-
- strcpy((char *)&tab[++count],libname);
- tab[0] = htons(count * 2);
- write(fd, tab, count * 2 + strlen(libname) + 2);
- return 0;
-}
-#endif
-
-
static char * program;
static void usage(void)
exit(0);
}
+
+
+/*
+ * this __MUST__ be at the VERY end of the file - do NOT move!!
+ *
+ * Local Variables:
+ * c-basic-offset: 4
+ * tab-width: 8
+ * end:
+ * vi: tabstop=8 shiftwidth=4 textwidth=79 noexpandtab
+ */
/*
- * Copyright (C) 2002-2003 David McCullough <davidm@snapgear.com>
+ * Copyright (C) 2002-2005 David McCullough <davidm@snapgear.com>
* Copyright (C) 1998 Kenneth Albanowski <kjahds@kjahds.com>
* The Silver Hammer Group, Ltd.
*
#define _LINUX_FLAT_H
#ifdef __KERNEL__
+#include <linux/types.h>
#include <asm/flat.h>
#endif
*/
struct flat_hdr {
- char magic[4];
- unsigned long rev; /* version (as above) */
- unsigned long entry; /* Offset of first executable instruction
- with text segment from beginning of file */
- unsigned long data_start; /* Offset of data segment from beginning of
- file */
- unsigned long data_end; /* Offset of end of data segment
- from beginning of file */
- unsigned long bss_end; /* Offset of end of bss segment from beginning
- of file */
-
- /* (It is assumed that data_end through bss_end forms the bss segment.) */
-
- unsigned long stack_size; /* Size of stack, in bytes */
- unsigned long reloc_start; /* Offset of relocation records from
- beginning of file */
- unsigned long reloc_count; /* Number of relocation records */
- unsigned long flags;
- unsigned long build_date; /* When the program/library was built */
- unsigned long filler[5]; /* Reservered, set to zero */
+ char magic[4];
+ uint32_t rev; /* version (as above) */
+ uint32_t entry; /* Offset of first executable instruction
+ with text segment from beginning of file */
+ uint32_t data_start; /* Offset of data segment from beginning of
+ file */
+ uint32_t data_end; /* Offset of end of data segment from beginning
+ of file */
+ uint32_t bss_end; /* Offset of end of bss segment from beginning
+ of file */
+
+ /* (It is assumed that data_end through bss_end forms the bss segment.) */
+
+ uint32_t stack_size; /* Size of stack, in bytes */
+ uint32_t reloc_start; /* Offset of relocation records from beginning
+ of file */
+ uint32_t reloc_count; /* Number of relocation records */
+ uint32_t flags;
+ uint32_t build_date; /* When the program/library was built */
+ uint32_t filler[5]; /* Reservered, set to zero */
};
#define FLAT_FLAG_RAM 0x0001 /* load program entirely into RAM */
#define FLAT_FLAG_GZDATA 0x0008 /* only data/relocs are compressed (for XIP) */
#define FLAT_FLAG_KTRACE 0x0010 /* output useful kernel trace for debugging */
-
#ifdef __KERNEL__ /* so systems without linux headers can compile the apps */
/*
* While it would be nice to keep this header clean, users of older
#include <asm/byteorder.h>
-#define OLD_FLAT_VERSION 0x00000002L
+#define OLD_FLAT_VERSION 0x00000002L
#define OLD_FLAT_RELOC_TYPE_TEXT 0
#define OLD_FLAT_RELOC_TYPE_DATA 1
#define OLD_FLAT_RELOC_TYPE_BSS 2
typedef union {
- unsigned long value;
- struct {
+ uint32_t value;
+ struct {
# if defined(mc68000) && !defined(CONFIG_COLDFIRE)
- signed long offset : 30;
- unsigned long type : 2;
+ int32_t offset : 30;
+ uint32_t type : 2;
# define OLD_FLAT_FLAG_RAM 0x1 /* load program entirely into RAM */
# elif defined(__BIG_ENDIAN_BITFIELD)
- unsigned long type : 2;
- signed long offset : 30;
+ uint32_t type : 2;
+ int32_t offset : 30;
# define OLD_FLAT_FLAG_RAM 0x1 /* load program entirely into RAM */
# elif defined(__LITTLE_ENDIAN_BITFIELD)
- signed long offset : 30;
- unsigned long type : 2;
+ int32_t offset : 30;
+ uint32_t type : 2;
# define OLD_FLAT_FLAG_RAM 0x1 /* load program entirely into RAM */
# else
# error "Unknown bitfield order for flat files."
# endif
- } reloc;
+ } reloc;
} flat_v2_reloc_t;
#endif /* __KERNEL__ */
#endif /* _LINUX_FLAT_H */
+
+/* this __MUST__ be at the VERY end of the file - do NOT move!!
+ * Local Variables:
+ * c-basic-offset: 4
+ * tab-width: 8
+ * end:
+ * vi: tabstop=8 shiftwidth=4 textwidth=79 noexpandtab
+ */