17df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* Describe known core note formats.
27df30109963092559d3760c0661a020f9daf1030The Android Open Source Project   Copyright (C) 2007, 2010 Red Hat, Inc.
37df30109963092559d3760c0661a020f9daf1030The Android Open Source Project   This file is part of elfutils.
47df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
57df30109963092559d3760c0661a020f9daf1030The Android Open Source Project   This file is free software; you can redistribute it and/or modify
67df30109963092559d3760c0661a020f9daf1030The Android Open Source Project   it under the terms of either
77df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
87df30109963092559d3760c0661a020f9daf1030The Android Open Source Project     * the GNU Lesser General Public License as published by the Free
97df30109963092559d3760c0661a020f9daf1030The Android Open Source Project       Software Foundation; either version 3 of the License, or (at
107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project       your option) any later version
117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project   or
137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project     * the GNU General Public License as published by the Free
157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project       Software Foundation; either version 2 of the License, or (at
167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project       your option) any later version
177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project   or both in parallel, as here.
197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project   elfutils is distributed in the hope that it will be useful, but
217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project   WITHOUT ANY WARRANTY; without even the implied warranty of
227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project   General Public License for more details.
247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project
257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project   You should have received copies of the GNU General Public License and
26   the GNU Lesser General Public License along with this program.  If
27   not, see <http://www.gnu.org/licenses/>.  */
28
29#ifdef HAVE_CONFIG_H
30# include <config.h>
31#endif
32
33#include <assert.h>
34#include <byteswap.h>
35#include <endian.h>
36#include <inttypes.h>
37#include <stdio.h>
38#include <stddef.h>
39#include <libeblP.h>
40
41
42int
43ebl_core_note (Ebl *ebl, const GElf_Nhdr *nhdr, const char *name,
44	       GElf_Word *regs_offset, size_t *nregloc,
45	       const Ebl_Register_Location **reglocs, size_t *nitems,
46	       const Ebl_Core_Item **items)
47{
48  int result = ebl->core_note (nhdr, name,
49			       regs_offset, nregloc, reglocs, nitems, items);
50  if (result == 0)
51    {
52      /* The machine specific function did not know this type.  */
53
54      *regs_offset = 0;
55      *nregloc = 0;
56      *reglocs = NULL;
57      switch (nhdr->n_type)
58	{
59#define ITEMS(type, table)				\
60	  case type:					\
61	    *items = table;				\
62	    *nitems = sizeof table / sizeof table[0];	\
63	    result = 1;					\
64	    break
65
66	  static const Ebl_Core_Item platform[] =
67	    {
68	      {
69		.name = "Platform",
70		.type = ELF_T_BYTE, .count = 0, .format = 's'
71	      }
72	    };
73	  ITEMS (NT_PLATFORM, platform);
74
75#undef	ITEMS
76	}
77    }
78
79  return result;
80}
81