1cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao/* 2cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * Copyright 2011, The Android Open Source Project 3cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * 4cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License"); 5cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * you may not use this file except in compliance with the License. 6cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * You may obtain a copy of the License at 7cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * 8cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * http://www.apache.org/licenses/LICENSE-2.0 9cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * 10cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * Unless required by applicable law or agreed to in writing, software 11cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS, 12cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * See the License for the specific language governing permissions and 14cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao * limitations under the License. 15cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao */ 16cbb2f63462cb96c46e84ad29b52f82bf35baa7e5Shih-wei Liao 1721e3620b5cfc13f3d9ff8128afec6f4e6ba9379bLogan Chien#include "ELFTypes.h" 180c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa#include <llvm/Support/raw_ostream.h> 190c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa#include <llvm/Support/Format.h> 2021e3620b5cfc13f3d9ff8128afec6f4e6ba9379bLogan Chien 2121e3620b5cfc13f3d9ff8128afec6f4e6ba9379bLogan Chiennamespace detail { 2221e3620b5cfc13f3d9ff8128afec6f4e6ba9379bLogan Chien 2321e3620b5cfc13f3d9ff8128afec6f4e6ba9379bLogan Chien#define ELF_TYPE_PRINT_OPERATOR(TYPE, FORMAT_WIDTH) \ 240c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa llvm::raw_ostream &operator<<(llvm::raw_ostream &os, TYPE const &val) { \ 250c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa os << llvm::format("%0*x", FORMAT_WIDTH, val.value); \ 260c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa return os; \ 270c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa } 280c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa 290c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa ELF_TYPE_PRINT_OPERATOR(ELF32Address, 8) 300c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa ELF_TYPE_PRINT_OPERATOR(ELF32Offset, 8) 310c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa ELF_TYPE_PRINT_OPERATOR(ELF64Address, 16) 320c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa ELF_TYPE_PRINT_OPERATOR(ELF64Offset, 16) 330c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa 340c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa#undef ELF_TYPE_PRINT_OPERATOR 350c5c38dd712cd3ab731dea6023e3806a31dab03fTDYa 3621e3620b5cfc13f3d9ff8128afec6f4e6ba9379bLogan Chien} // end namespace detail 37