Home | History | Annotate | Line # | Download | only in bfd
elf32-am33lin.c revision 1.1.1.2
      1      1.1  christos /* Matsushita AM33/2.0 support for 32-bit GNU/Linux ELF
      2  1.1.1.2  christos    Copyright (C) 2003-2015 Free Software Foundation, Inc.
      3      1.1  christos 
      4      1.1  christos    This file is part of BFD, the Binary File Descriptor library.
      5      1.1  christos 
      6      1.1  christos    This program is free software; you can redistribute it and/or modify
      7      1.1  christos    it under the terms of the GNU General Public License as published by
      8      1.1  christos    the Free Software Foundation; either version 3 of the License, or
      9      1.1  christos    (at your option) any later version.
     10      1.1  christos 
     11      1.1  christos    This program is distributed in the hope that it will be useful,
     12      1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13      1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14      1.1  christos    GNU General Public License for more details.
     15      1.1  christos 
     16      1.1  christos    You should have received a copy of the GNU General Public License
     17      1.1  christos    along with this program; if not, write to the Free Software
     18      1.1  christos    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     19      1.1  christos    MA 02110-1301, USA.  */
     20      1.1  christos 
     21      1.1  christos #include "sysdep.h"
     22      1.1  christos #include "bfd.h"
     23      1.1  christos #include "elf-bfd.h"
     24      1.1  christos #include "elf/mn10300.h"
     25      1.1  christos 
     26      1.1  christos #define elf_symbol_leading_char 0
     27      1.1  christos 
     28  1.1.1.2  christos #define TARGET_LITTLE_SYM	am33_elf32_linux_vec
     29      1.1  christos #define TARGET_LITTLE_NAME	"elf32-am33lin"
     30      1.1  christos #define ELF_ARCH		bfd_arch_mn10300
     31      1.1  christos #define ELF_MACHINE_CODE	EM_MN10300
     32      1.1  christos #define ELF_MACHINE_ALT1	EM_CYGNUS_MN10300
     33      1.1  christos #define ELF_MAXPAGESIZE		0x1000
     34      1.1  christos 
     35      1.1  christos /* Rename global functions.  */
     36      1.1  christos #define _bfd_mn10300_elf_merge_private_bfd_data  _bfd_am33_elf_merge_private_bfd_data
     37      1.1  christos #define _bfd_mn10300_elf_object_p                _bfd_am33_elf_object_p
     38      1.1  christos #define _bfd_mn10300_elf_final_write_processing  _bfd_am33_elf_final_write_processing
     39      1.1  christos 
     40      1.1  christos /* Support for core dump NOTE sections.  */
     41      1.1  christos static bfd_boolean
     42      1.1  christos elf32_am33lin_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
     43      1.1  christos {
     44      1.1  christos   int offset;
     45      1.1  christos   unsigned int size;
     46      1.1  christos 
     47      1.1  christos   switch (note->descsz)
     48      1.1  christos     {
     49      1.1  christos       default:
     50      1.1  christos 	return FALSE;
     51      1.1  christos 
     52      1.1  christos       case 184:
     53      1.1  christos       case 188:		/* Linux/am33 */
     54      1.1  christos 	/* pr_cursig */
     55  1.1.1.2  christos 	elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
     56      1.1  christos 
     57      1.1  christos 	/* pr_pid */
     58  1.1.1.2  christos 	elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 24);
     59      1.1  christos 
     60      1.1  christos 	/* pr_reg */
     61      1.1  christos 	offset = 72;
     62      1.1  christos 	size = 112;
     63      1.1  christos 
     64      1.1  christos 	break;
     65      1.1  christos     }
     66      1.1  christos 
     67      1.1  christos   /* Make a ".reg/999" section.  */
     68      1.1  christos   return _bfd_elfcore_make_pseudosection (abfd, ".reg", size,
     69      1.1  christos 					  note->descpos + offset);
     70      1.1  christos }
     71      1.1  christos 
     72      1.1  christos static bfd_boolean
     73      1.1  christos elf32_am33lin_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
     74      1.1  christos {
     75      1.1  christos   switch (note->descsz)
     76      1.1  christos     {
     77      1.1  christos       default:
     78      1.1  christos 	return FALSE;
     79      1.1  christos 
     80      1.1  christos       case 124:		/* Linux/am33 elf_prpsinfo */
     81  1.1.1.2  christos 	elf_tdata (abfd)->core->program
     82      1.1  christos 	 = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
     83  1.1.1.2  christos 	elf_tdata (abfd)->core->command
     84      1.1  christos 	 = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
     85      1.1  christos     }
     86      1.1  christos 
     87      1.1  christos   /* Note that for some reason, a spurious space is tacked
     88      1.1  christos      onto the end of the args in some (at least one anyway)
     89      1.1  christos      implementations, so strip it off if it exists.  */
     90      1.1  christos 
     91      1.1  christos   {
     92  1.1.1.2  christos     char *command = elf_tdata (abfd)->core->command;
     93      1.1  christos     int n = strlen (command);
     94      1.1  christos 
     95      1.1  christos     if (0 < n && command[n - 1] == ' ')
     96      1.1  christos       command[n - 1] = '\0';
     97      1.1  christos   }
     98      1.1  christos 
     99      1.1  christos   return TRUE;
    100      1.1  christos }
    101      1.1  christos 
    102      1.1  christos #define elf_backend_grok_prstatus	elf32_am33lin_grok_prstatus
    103      1.1  christos #define elf_backend_grok_psinfo		elf32_am33lin_grok_psinfo
    104      1.1  christos 
    105      1.1  christos #include "elf-m10300.c"
    106