Home | History | Annotate | Download | only in libebl
      1 /* Print contents of object file note.
      2    Copyright (C) 2002 Red Hat, Inc.
      3    Written by Ulrich Drepper <drepper (at) redhat.com>, 2002.
      4 
      5    This program is Open Source software; you can redistribute it and/or
      6    modify it under the terms of the Open Software License version 1.0 as
      7    published by the Open Source Initiative.
      8 
      9    You should have received a copy of the Open Software License along
     10    with this program; if not, you may obtain a copy of the Open Software
     11    License version 1.0 from http://www.opensource.org/licenses/osl.php or
     12    by writing the Open Source Initiative c/o Lawrence Rosen, Esq.,
     13    3001 King Ranch Road, Ukiah, CA 95482.   */
     14 
     15 #ifdef HAVE_CONFIG_H
     16 # include <config.h>
     17 #endif
     18 
     19 #include <inttypes.h>
     20 #include <stdio.h>
     21 #include <string.h>
     22 #include <libeblP.h>
     23 
     24 
     25 void
     26 ebl_object_note (ebl, name, type, descsz, desc)
     27      Ebl *ebl;
     28      const char *name;
     29      uint32_t type;
     30      uint32_t descsz;
     31      const char *desc;
     32 {
     33   if (! ebl->object_note (name, type, descsz, desc))
     34     /* The machine specific function did not know this type.  */
     35     switch (type)
     36       {
     37       case NT_VERSION:
     38 	if (strcmp (name, "GNU") == 0 && descsz >= 8)
     39 	  {
     40 	    struct
     41 	    {
     42 	      uint32_t os;
     43 	      uint32_t version[descsz / 4 - 1];
     44 	    } *tag = (__typeof (tag)) desc;
     45 
     46 	    const char *os;
     47 	    switch (tag->os)
     48 	      {
     49 	      case ELF_NOTE_OS_LINUX:
     50 		os = "Linux";
     51 		break;
     52 
     53 	      case ELF_NOTE_OS_GNU:
     54 		os = "GNU";
     55 		break;
     56 
     57 	      case ELF_NOTE_OS_SOLARIS2:
     58 		os = "Solaris";
     59 		break;
     60 
     61 	      case ELF_NOTE_OS_FREEBSD:
     62 		os = "FreeBSD";
     63 		break;
     64 
     65 	      default:
     66 		os = "???";
     67 		break;
     68 	      }
     69 
     70 	    printf (gettext ("    OS: %s, ABI: "), os);
     71 	    size_t cnt;
     72 	    for (cnt = 0; cnt < descsz / 4 - 1; ++cnt)
     73 	      {
     74 		if (cnt != 0)
     75 		  putchar_unlocked ('.');
     76 		printf ("%" PRIu32, tag->version[cnt]);
     77 	      }
     78 	    putchar_unlocked ('\n');
     79 	    break;
     80 	  }
     81 	/* FALLTHROUGH */
     82 
     83       default:
     84 	/* Unknown type.  */
     85 	break;
     86       }
     87 }
     88