diff options
Diffstat (limited to 'bfd/hppa.c')
-rw-r--r-- | bfd/hppa.c | 545 |
1 files changed, 287 insertions, 258 deletions
@@ -38,7 +38,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <sys/dir.h> #include <signal.h> #include <machine/reg.h> -#include <sys/user.h> /* After a.out.h */ +#include <sys/user.h> /* After a.out.h */ #include <sys/file.h> #include <errno.h> @@ -70,10 +70,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ((__m_num) >= _PA_RISC1_1_ID && (__m_num) <= _PA_RISC_MAXID)) #endif /* _PA_RISC_ID */ -struct container { - struct header f; - struct som_exec_auxhdr e; -}; +struct container + { + struct header f; + struct som_exec_auxhdr e; + }; static bfd_target * hppa_object_setup (abfd, file_hdrp, aux_hdrp) @@ -87,17 +88,19 @@ hppa_object_setup (abfd, file_hdrp, aux_hdrp) asection *text, *data, *bss; rawptr = (struct container *) bfd_zalloc (abfd, sizeof (struct container)); - if (rawptr == NULL) { - bfd_error = no_memory; - return 0; - } + if (rawptr == NULL) + { + bfd_error = no_memory; + return 0; + } rawptr1 = (struct hppa_data_struct *) bfd_zalloc (abfd, sizeof (struct hppa_data_struct)); - if (rawptr1 == NULL) { - bfd_error = no_memory; - return 0; - } - + if (rawptr1 == NULL) + { + bfd_error = no_memory; + return 0; + } + abfd->tdata.hppa_data = rawptr1; obj_file_hdr (abfd) = &rawptr->f; obj_aux_hdr (abfd) = &rawptr->e; @@ -113,17 +116,17 @@ hppa_object_setup (abfd, file_hdrp, aux_hdrp) bfd_get_start_address (abfd) = aux_hdrp->exec_entry; - obj_pa_symbols (abfd) = (hppa_symbol_type *)NULL; + obj_pa_symbols (abfd) = (hppa_symbol_type *) NULL; bfd_get_symcount (abfd) = file_hdrp->symbol_total; - bfd_default_set_arch_mach(abfd, bfd_arch_hppa, 0); + bfd_default_set_arch_mach (abfd, bfd_arch_hppa, 0); /* create the sections. This is raunchy, but bfd_close wants to reclaim them */ - text = bfd_make_section(abfd, ".text"); - data = bfd_make_section(abfd, ".data"); - bss = bfd_make_section(abfd, ".bss"); + text = bfd_make_section (abfd, ".text"); + data = bfd_make_section (abfd, ".data"); + bss = bfd_make_section (abfd, ".bss"); text->_raw_size = aux_hdrp->exec_tsize; data->_raw_size = aux_hdrp->exec_dsize; @@ -133,23 +136,23 @@ hppa_object_setup (abfd, file_hdrp, aux_hdrp) data->flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS); bss->flags = SEC_ALLOC; - /* The virtual memory addresses of the sections */ - text->vma = aux_hdrp->exec_tmem; - data->vma = aux_hdrp->exec_dmem; - bss->vma = aux_hdrp->exec_bfill; - - /* The file offsets of the sections */ - text->filepos = aux_hdrp->exec_tfile; - data->filepos = aux_hdrp->exec_dfile; - - /* The file offsets of the relocation info */ - text->rel_filepos = 0; - data->rel_filepos = 0; - - /* The file offsets of the string table and symbol table. */ - obj_sym_filepos (abfd) = file_hdrp->symbol_location; + /* The virtual memory addresses of the sections */ + text->vma = aux_hdrp->exec_tmem; + data->vma = aux_hdrp->exec_dmem; + bss->vma = aux_hdrp->exec_bfill; + + /* The file offsets of the sections */ + text->filepos = aux_hdrp->exec_tfile; + data->filepos = aux_hdrp->exec_dfile; + + /* The file offsets of the relocation info */ + text->rel_filepos = 0; + data->rel_filepos = 0; + + /* The file offsets of the string table and symbol table. */ + obj_sym_filepos (abfd) = file_hdrp->symbol_location; bfd_get_symcount (abfd) = file_hdrp->symbol_total; - obj_str_filepos (abfd) = file_hdrp->symbol_strings_location; + obj_str_filepos (abfd) = file_hdrp->symbol_strings_location; obj_stringtab_size (abfd) = file_hdrp->symbol_strings_size; return abfd->xvec; @@ -174,11 +177,11 @@ make_unique_section (abfd, name, num) sect = bfd_make_section (abfd, name); while (!sect) { - sprintf(altname, "%s-%d", name, num++); + sprintf (altname, "%s-%d", name, num++); sect = bfd_make_section (abfd, altname); } - newname = bfd_alloc (abfd, strlen(sect->name) + 1); + newname = bfd_alloc (abfd, strlen (sect->name) + 1); strcpy (newname, sect->name); sect->name = newname; @@ -199,7 +202,7 @@ setup_sections (abfd, file_hdr) char *space_strings; int space_index; -/* First, read in space names */ + /* First, read in space names */ space_strings = alloca (file_hdr->space_strings_size); if (!space_strings) @@ -222,7 +225,7 @@ setup_sections (abfd, file_hdr) /* Read the space dictionary element */ if (bfd_seek (abfd, file_hdr->space_location - + space_index * sizeof space, SEEK_SET) < 0) + + space_index * sizeof space, SEEK_SET) < 0) return 0; if (bfd_read (&space, 1, sizeof space, abfd) != sizeof space) return 0; @@ -237,15 +240,15 @@ setup_sections (abfd, file_hdr) /* Now, read in the first subspace for this space */ if (bfd_seek (abfd, file_hdr->subspace_location - + space.subspace_index * sizeof subspace, - SEEK_SET) < 0) + + space.subspace_index * sizeof subspace, + SEEK_SET) < 0) return 0; if (bfd_read (&subspace, 1, sizeof subspace, abfd) != sizeof subspace) return 0; /* Seek back to the start of the subspaces for loop below */ if (bfd_seek (abfd, file_hdr->subspace_location - + space.subspace_index * sizeof subspace, - SEEK_SET) < 0) + + space.subspace_index * sizeof subspace, + SEEK_SET) < 0) return 0; /* Setup the section flags as appropriate (this is somewhat bogus, as @@ -277,7 +280,7 @@ setup_sections (abfd, file_hdr) /* Make a section out of this subspace */ subspace_asect = make_unique_section (abfd, subspace.name.n_name, - space.subspace_index + subspace_index); + space.subspace_index + subspace_index); if (!subspace_asect) return 0; @@ -297,10 +300,10 @@ setup_sections (abfd, file_hdr) /* Setup the sizes for the space section based upon the info in the last subspace of the space. */ space_asect->_cooked_size = (subspace.subspace_start - space_asect->vma) - + subspace.subspace_length; + + subspace.subspace_length; space_asect->_raw_size = (subspace.file_loc_init_value - space_asect->filepos) - + subspace.initialization_length; + + subspace.initialization_length; } } @@ -311,7 +314,7 @@ hppa_object_p (abfd) struct header file_hdr; struct som_exec_auxhdr aux_hdr; - if (bfd_read ((PTR) &file_hdr, 1, FILE_HDR_SIZE, abfd) != FILE_HDR_SIZE) + if (bfd_read ((PTR) & file_hdr, 1, FILE_HDR_SIZE, abfd) != FILE_HDR_SIZE) return 0; if (!_PA_RISC_ID (file_hdr.system_id)) @@ -322,7 +325,7 @@ hppa_object_p (abfd) switch (file_hdr.a_magic) { - case RELOC_MAGIC: /* I'm not really sure about all of these types... */ + case RELOC_MAGIC: /* I'm not really sure about all of these types... */ case EXEC_MAGIC: case SHARE_MAGIC: case DEMAND_MAGIC: @@ -345,19 +348,19 @@ hppa_object_p (abfd) return 0; } - if (bfd_read ((PTR) &aux_hdr, 1, AUX_HDR_SIZE, abfd) != AUX_HDR_SIZE) + if (bfd_read ((PTR) & aux_hdr, 1, AUX_HDR_SIZE, abfd) != AUX_HDR_SIZE) bfd_error = wrong_format; if (!setup_sections (abfd, &file_hdr)) return 0; - return hppa_object_setup(abfd, &file_hdr, &aux_hdr); + return hppa_object_setup (abfd, &file_hdr, &aux_hdr); } static boolean -DEFUN(hppa_mkobject,(abfd), - bfd *abfd) -{ +DEFUN (hppa_mkobject, (abfd), + bfd * abfd) +{ fprintf (stderr, "hppa_mkobject unimplemented\n"); fflush (stderr); abort (); @@ -365,8 +368,8 @@ DEFUN(hppa_mkobject,(abfd), } boolean -DEFUN(hppa_write_object_contents,(abfd), - bfd *abfd) +DEFUN (hppa_write_object_contents, (abfd), + bfd * abfd) { fprintf (stderr, "hppa_write_object_contents unimplemented\n"); fflush (stderr); @@ -424,15 +427,15 @@ static asymbol * hppa_make_empty_symbol (abfd) bfd *abfd; { - hppa_symbol_type *new = - (hppa_symbol_type *)bfd_zalloc (abfd, sizeof (hppa_symbol_type)); + hppa_symbol_type *new = + (hppa_symbol_type *) bfd_zalloc (abfd, sizeof (hppa_symbol_type)); new->symbol.the_bfd = abfd; return &new->symbol; } -static void -hppa_print_symbol (ignore_abfd, afile, symbol, how) +static void +hppa_print_symbol (ignore_abfd, afile, symbol, how) bfd *ignore_abfd; PTR afile; asymbol *symbol; @@ -464,7 +467,7 @@ hppa_set_section_contents (abfd, section, location, offset, count) { fprintf (stderr, "hppa_set_section_contents unimplimented\n"); fflush (stderr); - abort(); + abort (); return false; } @@ -477,7 +480,7 @@ hppa_set_arch_mach (abfd, arch, machine) fprintf (stderr, "hppa_set_arch_mach unimplemented\n"); fflush (stderr); /* Allow any architecture to be supported by the hppa backend */ - return bfd_default_set_arch_mach(abfd, arch, machine); + return bfd_default_set_arch_mach (abfd, arch, machine); } static boolean @@ -499,8 +502,8 @@ hppa_find_nearest_line (abfd, section, symbols, offset, filename_ptr, static int hppa_sizeof_headers (abfd, reloc) - bfd *abfd; - boolean reloc; + bfd *abfd; + boolean reloc; { fprintf (stderr, "hppa_sizeof_headers unimplemented\n"); fflush (stderr); @@ -546,19 +549,19 @@ hppa_core_file_p (abfd) int val; struct corehead core_header; - val = bfd_read ((void *)&core_header, 1, sizeof core_header, abfd); + val = bfd_read ((void *) &core_header, 1, sizeof core_header, abfd); if (val <= 0) break; switch (core_header.type) { case CORE_KERNEL: case CORE_FORMAT: - bfd_seek (abfd, core_header.len, SEEK_CUR); /* Just skip this */ + bfd_seek (abfd, core_header.len, SEEK_CUR); /* Just skip this */ break; case CORE_EXEC: { struct proc_exec proc_exec; - bfd_read ((void *)&proc_exec, 1, core_header.len, abfd); + bfd_read ((void *) &proc_exec, 1, core_header.len, abfd); strncpy (core_command (abfd), proc_exec.cmd, MAXCOMLEN + 1); } break; @@ -566,9 +569,9 @@ hppa_core_file_p (abfd) { struct proc_info proc_info; core_regsec (abfd) = make_bfd_asection (abfd, ".reg", - SEC_ALLOC+SEC_HAS_CONTENTS, + SEC_ALLOC + SEC_HAS_CONTENTS, core_header.len, - (int)&proc_info - (int)&proc_info.hw_regs, + (int) &proc_info - (int) &proc_info.hw_regs, 2); bfd_read (&proc_info, 1, core_header.len, abfd); core_signal (abfd) = proc_info.sig; @@ -578,7 +581,7 @@ hppa_core_file_p (abfd) break; case CORE_DATA: core_datasec (abfd) = make_bfd_asection (abfd, ".data", - SEC_ALLOC+SEC_LOAD+SEC_HAS_CONTENTS, + SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS, core_header.len, core_header.addr, 2); @@ -588,7 +591,7 @@ hppa_core_file_p (abfd) break; case CORE_STACK: core_stacksec (abfd) = make_bfd_asection (abfd, ".stack", - SEC_ALLOC+SEC_LOAD+SEC_HAS_CONTENTS, + SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS, core_header.len, core_header.addr, 2); @@ -626,93 +629,105 @@ hppa_core_file_failing_signal (abfd) /* ARGSUSED */ static boolean -hppa_core_file_matches_executable_p (core_bfd, exec_bfd) +hppa_core_file_matches_executable_p (core_bfd, exec_bfd) bfd *core_bfd, *exec_bfd; { - return true; /* FIXME, We have no way of telling at this point */ + return true; /* FIXME, We have no way of telling at this point */ } +#endif /* HOST_HPPAHPUX */ + /* Miscellaneous Support Functions -- Control Structures and Functions for the PA. */ -unsigned int assemble_3(x) +unsigned int +assemble_3 (x) unsigned int x; { - return ( ( (x & 1 ) << 2 ) | ( ( x & 6 ) >> 1 ) ) & 7; + return (((x & 1) << 2) | ((x & 6) >> 1)) & 7; } -void dis_assemble_3(x,r) +void +dis_assemble_3 (x, r) unsigned int x; unsigned int *r; { - *r = ( ( (x & 4 ) >> 2 ) | ( ( x & 3 ) << 1 ) ) & 7; + *r = (((x & 4) >> 2) | ((x & 3) << 1)) & 7; } -unsigned int assemble_12(x,y) - unsigned int x,y; +unsigned int +assemble_12 (x, y) + unsigned int x, y; { - return ( ( ( y & 1 ) << 11 ) | ( ( x & 1 ) << 10 ) | ( ( x & 0x7fe ) >> 1) ) & 0xfff; + return (((y & 1) << 11) | ((x & 1) << 10) | ((x & 0x7fe) >> 1)) & 0xfff; } -void dis_assemble_12(as12,x,y) +void +dis_assemble_12 (as12, x, y) unsigned int as12; - unsigned int *x,*y; + unsigned int *x, *y; { - *y = ( as12 & 0x800 ) >> 11; - *x = ( ( as12 & 0x3ff ) << 1 ) | ( ( as12 & 0x400 ) >> 10 ); + *y = (as12 & 0x800) >> 11; + *x = ((as12 & 0x3ff) << 1) | ((as12 & 0x400) >> 10); } -unsigned long assemble_17(x,y,z) - unsigned int x,y,z; +unsigned long +assemble_17 (x, y, z) + unsigned int x, y, z; { unsigned long temp; - temp = ( ( z & 1 ) << 16 ) | - ( ( x & 0x1f ) << 11 ) | - ( ( y & 1 ) << 10 ) | - ( ( y & 0x7fe ) >> 1); + temp = ((z & 1) << 16) | + ((x & 0x1f) << 11) | + ((y & 1) << 10) | + ((y & 0x7fe) >> 1); return temp & 0x1ffff; } -void dis_assemble_17(as17,x,y,z) +void +dis_assemble_17 (as17, x, y, z) unsigned int as17; - unsigned int *x,*y,*z; + unsigned int *x, *y, *z; { - *z = ( as17 & 0x10000 ) >> 16; - *x = ( as17 & 0x0f800 ) >> 11; - *y = ( ( ( as17 & 0x00400 ) >> 10 ) | ( ( as17 & 0x3ff ) << 1 ) ) & 0x7ff; + *z = (as17 & 0x10000) >> 16; + *x = (as17 & 0x0f800) >> 11; + *y = (((as17 & 0x00400) >> 10) | ((as17 & 0x3ff) << 1)) & 0x7ff; } -unsigned long assemble_21(x) +unsigned long +assemble_21 (x) unsigned int x; { unsigned long temp; - temp = ( ( x & 1 ) << 20 ) | - ( ( x & 0xffe ) << 8 ) | - ( ( x & 0xc000 ) >> 7 ) | - ( ( x & 0x1f0000 ) >> 14 ) | - ( ( x & 0x003000 ) >> 12 ); + temp = ((x & 1) << 20) | + ((x & 0xffe) << 8) | + ((x & 0xc000) >> 7) | + ((x & 0x1f0000) >> 14) | + ((x & 0x003000) >> 12); return temp & 0x1fffff; } -void dis_assemble_21(as21,x) - unsigned int as21,*x; +void +dis_assemble_21 (as21, x) + unsigned int as21, *x; { unsigned long temp; - temp = ( as21 & 0x100000 ) >> 20; - temp |= ( as21 & 0x0ffe00 ) >> 8; - temp |= ( as21 & 0x000180 ) << 7; - temp |= ( as21 & 0x00007c ) << 14; - temp |= ( as21 & 0x000003 ) << 12; + temp = (as21 & 0x100000) >> 20; + temp |= (as21 & 0x0ffe00) >> 8; + temp |= (as21 & 0x000180) << 7; + temp |= (as21 & 0x00007c) << 14; + temp |= (as21 & 0x000003) << 12; *x = temp; } -unsigned long sign_ext(x,len) - unsigned int x,len; +#if 0 +unsigned long +sign_ext (x, len) + unsigned int x, len; { unsigned int sign; unsigned int result; @@ -721,22 +736,32 @@ unsigned long sign_ext(x,len) i = 0; len_ones = 0; - while ( i < len ) { - len_ones = (len_ones << 1) | 1; - i++; - } + while (i < len) + { + len_ones = (len_ones << 1) | 1; + i++; + } - sign = (x >> (len-1)) & 1; + sign = (x >> (len - 1)) & 1; - if ( sign ) - result = ( ~0 ^ len_ones ) | ( len_ones & x ); + if (sign) + result = (~0 ^ len_ones) | (len_ones & x); else result = len_ones & x; return result; } -static unsigned int ones(n) +#endif +static unsigned long +sign_ext (x, len) + unsigned int x, len; +{ + return (x << (32 - len)) >> (32 - len); +} + +static unsigned int +ones (n) int n; { unsigned int len_ones; @@ -744,40 +769,44 @@ static unsigned int ones(n) i = 0; len_ones = 0; - while ( i < n ) { - len_ones = (len_ones << 1) | 1; - i++; - } + while (i < n) + { + len_ones = (len_ones << 1) | 1; + i++; + } return len_ones; } -void sign_unext(x,len,result) - unsigned int x,len; +void +sign_unext (x, len, result) + unsigned int x, len; unsigned int *result; { unsigned int len_ones; - len_ones = ones(len); + len_ones = ones (len); *result = x & len_ones; } -unsigned long low_sign_ext(x,len) - unsigned int x,len; +unsigned long +low_sign_ext (x, len) + unsigned int x, len; { - unsigned int temp1,temp2; + unsigned int temp1, temp2; unsigned int len_ones; - len_ones = ones(len); + len_ones = ones (len); - temp1 = ( x & 1 ) << (len-1); - temp2 = ( ( x & 0xfffffffe ) & len_ones ) >> 1; - return sign_ext( (temp1 | temp2),len); + temp1 = (x & 1) << (len - 1); + temp2 = ((x & 0xfffffffe) & len_ones) >> 1; + return sign_ext ((temp1 | temp2), len); } -void low_sign_unext(x,len,result) - unsigned int x,len; +void +low_sign_unext (x, len, result) + unsigned int x, len; unsigned int *result; { unsigned int temp; @@ -786,14 +815,14 @@ void low_sign_unext(x,len,result) unsigned int one_bit_at_len; unsigned int len_ones; - len_ones = ones(len); - one_bit_at_len = 1 << (len-1); + len_ones = ones (len); + one_bit_at_len = 1 << (len - 1); - sign_unext(x,len,&temp); + sign_unext (x, len, &temp); sign = temp & one_bit_at_len; - sign >>= (len-1); + sign >>= (len - 1); - rest = temp & ( len_ones ^ one_bit_at_len ); + rest = temp & (len_ones ^ one_bit_at_len); rest <<= 1; *result = rest | sign; @@ -801,177 +830,177 @@ void low_sign_unext(x,len,result) /* These work when 'y' is a power of two only. */ -long -round_down(x,y) -long x,y; +static long +round_down (x, y) + long x, y; { - return x & ~(y-1); + return x & ~(y - 1); } -long -round(x,y) -long x,y; +static long +round (x, y) + long x, y; { - return (x + y/2) & ~(y-1); + return (x + y / 2) & ~(y - 1); } -long -round_up(x,y) -long x,y; +static long +round_up (x, y) + long x, y; { - return x - (x | ~(y-1)); + return x - (x | ~(y - 1)); } /* L(Symbol, Addend): */ /* round_down (Symbol + Addend, 2048) */ -long -L(Symbol, Addend) +static long +L (Symbol, Addend) { - return (round_down(Symbol + Addend, 2048)) >> 11; + return (round_down (Symbol + Addend, 2048)) >> 11; } /* R(Symbol, Addend): */ /* Symbol + Addend - round_down (Symbol + Addend, 2048) */ -long -R(Symbol, Addend) +static long +R (Symbol, Addend) { - return Symbol + Addend - round_down (Symbol + Addend, 2048); + return Symbol + Addend - round_down (Symbol + Addend, 2048); } /* LS(Symbol, Addend): */ /* round (Symbol + Addend, 2048) */ -long -LS(Symbol, Addend) +static long +LS (Symbol, Addend) { - return round (Symbol + Addend, 2048); + return round (Symbol + Addend, 2048); } /* RS(Symbol, Addend): */ /* Symbol + Addend - round (Symbol + Addend, 2048) */ -long -RS(Symbol, Addend) +static long +RS (Symbol, Addend) { - return Symbol + Addend - round (Symbol + Addend, 2048); + return Symbol + Addend - round (Symbol + Addend, 2048); } /* LD(Symbol, Addend): */ /* round_up (Symbol + Addend, 2048) */ -long -LD(Symbol, Addend) +static long +LD (Symbol, Addend) { - return (round_up (Symbol + Addend, 2048)) >> 11; + return (round_up (Symbol + Addend, 2048)) >> 11; } /* RD(Symbol, Addend): */ /* Symbol + Addend - round_up (Symbol + Addend, 2048) */ -long -RD(Symbol, Addend) +static long +RD (Symbol, Addend) { - return Symbol + Addend - round_up (Symbol + Addend, 2048); + return Symbol + Addend - round_up (Symbol + Addend, 2048); } /* LR(Symbol, Addend): */ /* round_down (Symbol, 2048) + round (Addend, 8192) */ -long -LR(Symbol, Addend) +static long +LR (Symbol, Addend) { - return (round_down (Symbol, 2048) + round (Addend, 8192)) >> 11; + return (round_down (Symbol, 2048) + round (Addend, 8192)) >> 11; } /* RR(Symbol, Addend): */ /* Symbol - round_down (Symbol, 2048) + */ /* Addend - round (Addend, 8192) */ -long -RR(Symbol, Addend) +static long +RR (Symbol, Addend) { - return Symbol - - round_down (Symbol, 2048) - + Addend - round (Addend, 8192); + return Symbol + - round_down (Symbol, 2048) + + Addend - round (Addend, 8192); } unsigned long -DEFUN(hppa_field_adjust, (value,constant_value,r_field), - unsigned long value AND - unsigned long constant_value AND - unsigned short r_field) +DEFUN (hppa_field_adjust, (value, constant_value, r_field), + unsigned long value AND + unsigned long constant_value AND + unsigned short r_field) { - unsigned long init_value = value; - value += constant_value; - switch (r_field) { - case e_fsel: /* F : no change */ - break; + unsigned long init_value = value; + value += constant_value; + switch (r_field) + { + case e_fsel: /* F : no change */ + break; - case e_lssel: /* LS : if (bit 21) then add 0x800 + case e_lssel: /* LS : if (bit 21) then add 0x800 arithmetic shift right 11 bits */ - if ( value & 0x00000400 ) - value += 0x800; - value = (value & 0xfffff800) >> 11; - BFD_ASSERT(value == LS(init_value,constant_value)); - break; - - case e_rssel: /* RS : Sign extend from bit 21 */ - if ( value & 0x00000400 ) - value |= 0xfffff800; - else - value &= 0x7ff; - BFD_ASSERT(value == RS(init_value,constant_value)); - break; - - case e_lsel: /* L : Arithmetic shift right 11 bits */ - value = (value & 0xfffff800) >> 11; - BFD_ASSERT(value == L(init_value,constant_value)); - break; - - case e_rsel: /* R : Set bits 0-20 to zero */ - value = value & 0x7ff; - BFD_ASSERT(value == R(init_value,constant_value)); - break; - - case e_ldsel: /* LD : Add 0x800, arithmetic shift + if (value & 0x00000400) + value += 0x800; + value = (value & 0xfffff800) >> 11; + BFD_ASSERT (value == LS (init_value, constant_value)); + break; + + case e_rssel: /* RS : Sign extend from bit 21 */ + if (value & 0x00000400) + value |= 0xfffff800; + else + value &= 0x7ff; + BFD_ASSERT (value == RS (init_value, constant_value)); + break; + + case e_lsel: /* L : Arithmetic shift right 11 bits */ + value = (value & 0xfffff800) >> 11; + BFD_ASSERT (value == L (init_value, constant_value)); + break; + + case e_rsel: /* R : Set bits 0-20 to zero */ + value = value & 0x7ff; + BFD_ASSERT (value == R (init_value, constant_value)); + break; + + case e_ldsel: /* LD : Add 0x800, arithmetic shift right 11 bits */ - value += 0x800; - value = (value & 0xfffff800) >> 11; - BFD_ASSERT(value == LD(init_value,constant_value)); - break; - - case e_rdsel: /* RD : Set bits 0-20 to one */ - value |= 0xfffff800; - BFD_ASSERT(value == RD(init_value,constant_value)); - break; - - case e_lrsel: /* LR : L with "rounded" constant */ - value = value + ((constant_value + 0x1000) & 0xffffe000); - value = (value & 0xfffff800) >> 11; - BFD_ASSERT(value == LR(init_value,constant_value)); - break; - - case e_rrsel: /* RR : R with "rounded" constant */ - value = value + ((constant_value + 0x1000) & 0xffffe000); - value = (value & 0x7ff) + constant_value - ((constant_value + 0x1000) & 0xffffe000); - BFD_ASSERT(value == RR(init_value,constant_value)); - break; + value += 0x800; + value = (value & 0xfffff800) >> 11; + BFD_ASSERT (value == LD (init_value, constant_value)); + break; - default: - fprintf(stderr,"Unrecognized field_selector 0x%02x\n", r_field); - break; - } + case e_rdsel: /* RD : Set bits 0-20 to one */ + value |= 0xfffff800; + BFD_ASSERT (value == RD (init_value, constant_value)); + break; + + case e_lrsel: /* LR : L with "rounded" constant */ + value = value + ((constant_value + 0x1000) & 0xffffe000); + value = (value & 0xfffff800) >> 11; + BFD_ASSERT (value == LR (init_value, constant_value)); + break; + + case e_rrsel: /* RR : R with "rounded" constant */ + value = value + ((constant_value + 0x1000) & 0xffffe000); + value = (value & 0x7ff) + constant_value - ((constant_value + 0x1000) & 0xffffe000); + BFD_ASSERT (value == RR (init_value, constant_value)); + break; + + default: + fprintf (stderr, "Unrecognized field_selector 0x%02x\n", r_field); + break; + } return value; - + } /* End of miscellaneous support functions. */ -#endif /* HOST_HPPAHPUX */ #ifdef HOST_HPPABSD - /* All the core file code for BSD needs to be rewritten cleanly. For +/* All the core file code for BSD needs to be rewritten cleanly. For now we do not support core files under BSD. */ #define hppa_core_file_p _bfd_dummy_target @@ -1013,32 +1042,32 @@ bfd_target hppa_vec = (HAS_RELOC | EXEC_P | /* object flags */ HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED), - (SEC_CODE|SEC_DATA|SEC_ROM|SEC_HAS_CONTENTS - |SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */ + (SEC_CODE | SEC_DATA | SEC_ROM | SEC_HAS_CONTENTS + | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */ - /* leading_symbol_char: is the first char of a user symbol +/* leading_symbol_char: is the first char of a user symbol predictable, and if so what is it */ - 0, + 0, ' ', /* ar_pad_char */ 16, /* ar_max_namelen */ - 3, /* minimum alignment */ -_do_getb64, _do_getb_signed_64, _do_putb64, - _do_getb32, _do_getb_signed_32, _do_putb32, - _do_getb16, _do_getb_signed_16, _do_putb16, /* data */ -_do_getb64, _do_getb_signed_64, _do_putb64, - _do_getb32, _do_getb_signed_32, _do_putb32, - _do_getb16, _do_getb_signed_16, _do_putb16, /* hdrs */ - { _bfd_dummy_target, - hppa_object_p, /* bfd_check_format */ - bfd_generic_archive_p, - hppa_core_file_p, - }, + 3, /* minimum alignment */ + _do_getb64, _do_getb_signed_64, _do_putb64, + _do_getb32, _do_getb_signed_32, _do_putb32, + _do_getb16, _do_getb_signed_16, _do_putb16, /* data */ + _do_getb64, _do_getb_signed_64, _do_putb64, + _do_getb32, _do_getb_signed_32, _do_putb32, + _do_getb16, _do_getb_signed_16, _do_putb16, /* hdrs */ + {_bfd_dummy_target, + hppa_object_p, /* bfd_check_format */ + bfd_generic_archive_p, + hppa_core_file_p, + }, { bfd_false, - hppa_mkobject, + hppa_mkobject, _bfd_generic_mkarchive, bfd_false - }, + }, { bfd_false, hppa_write_object_contents, @@ -1046,7 +1075,7 @@ _do_getb64, _do_getb_signed_64, _do_putb64, bfd_false, }, #undef hppa - JUMP_TABLE(hppa), + JUMP_TABLE (hppa), (PTR) 0 }; |